package com.woniuxy.vuecli.util;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.jwt.JWT;

/**
 * @Author author
 * @Create 2024-02-19 11:04
 */
public class JwtUtil {

    public static final String JWT_KEY="woniuxy";
    public static final String JWT_ISSUER="zs";
//    public static final int JWT_EXPIRE_MILLISECOND=1000*60*30;  //默认30分钟
    public static final int JWT_EXPIRE_MILLISECOND=1000*10;  //测试token10秒有效
    public static final int JWT_EXPIRE_MILLISECOND_REFRESH=1000*20;  //测试token10秒有效

    public static String create(String eid, String ename) {
        return JWT.create()
                .setKey(JWT_KEY.getBytes())    //设置密钥，默认算法是：HS256(HmacSHA256)
                .setIssuer(JWT_ISSUER)    //设置 jwt签发者
                .setIssuedAt(DateTime.now())      //设置jwt的签发时间
                .setNotBefore(DateTime.now()) //不可用时间点界限
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND, JWT_EXPIRE_MILLISECOND)) //设置jwt的过期时间("exp")的Payload值，这个过期时间必须要大于签发时间
                .setPayload("eid", eid)   //载荷，存储编程中要使用的自定义信息
                .setPayload("ename", ename)
//                .setPayload("emoloyee",new Employee())
                .sign();
    }
    public static String createfresh(String eid, String ename) {
        return JWT.create()
                .setKey(JWT_KEY.getBytes())    //设置密钥，默认算法是：HS256(HmacSHA256)
                .setIssuer(JWT_ISSUER)    //设置 jwt签发者
                .setIssuedAt(DateTime.now())      //设置jwt的签发时间
                .setNotBefore(DateTime.now()) //不可用时间点界限
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND, JWT_EXPIRE_MILLISECOND_REFRESH)) //设置jwt的过期时间("exp")的Payload值，这个过期时间必须要大于签发时间
                .setPayload("eid", eid)   //载荷，存储编程中要使用的自定义信息
                .setPayload("ename", ename)
//                .setPayload("emoloyee",new Employee())
                .sign();
    }

    public static boolean verify(String token){
        return JWT.of(token).setKey(JWT_KEY.getBytes()).verify();
    }

    //validate()验证是否有效，true,有效没有过期
    //isExpire(),是否过期,true,过期
    public static boolean isExpire(String token){
        return !JWT.of(token).setKey(JWT_KEY.getBytes()).validate(0);
    }

    public static String getEid(String token){
        return JWT.of(token).getPayload("eid").toString();
    }
    public static String getEname(String token){
        return JWT.of(token).getPayload("ename").toString();
    }


}
